package com.yungu.swift.assets.passenger.service;

import com.yungu.swift.assets.passenger.model.dto.PassengerDto;
import com.yungu.swift.assets.passenger.model.dto.PassengerLogDto;
import com.yungu.swift.assets.passenger.model.param.AdminPassengerAbortParam;
import com.yungu.swift.assets.passenger.model.param.AdminPassengerPageParam;
import com.yungu.swift.assets.passenger.model.param.ApiPassengerLoginParam;
import com.yungu.swift.assets.passenger.model.vo.PassengerSimpleInfoVo;
import com.yungu.swift.assets.passenger.model.vo.PassengerVo;
import com.yungu.swift.base.ResponseData;
import com.yungu.swift.base.model.PageVo;
import com.yungu.swift.base.service.BaseService;
import com.yungu.swift.system.marketing.model.param.AdminGiftUuidPageParam;

import java.util.List;
import java.util.Map;


/**
 * Copyright © 厦门云谷互联信息有限公司 2018-2020 All Right Reserved
 * <p>
 * 乘客业务逻辑接口
 *
 * @author cuixiuyin - Generate
 * @version 1.1.1-SNAPSHOT
 * @since 2018-07-02 11:20
 */
public interface PassengerService extends BaseService<PassengerDto> {


    /**
     * 乘客登陆接口
     *
     * @param passenger    参数
     * @param passengerLog 参数
     * @return AjaxList
     */
    ResponseData<PassengerVo> login(PassengerDto passenger, PassengerLogDto passengerLog);

    /**
     * 乘客登陆接口
     *
     * @param passengerDto    参数
     * @param passengerLogDto 参数
     * @param active          参数
     * @param giftUuid        参数
     * @return AjaxList
     */
    ResponseData<PassengerVo> login(PassengerDto passengerDto, PassengerLogDto passengerLogDto, Integer active, String giftUuid);


    /**
     * 乘客登陆接口
     *
     * @param passengerLoginParam 乘客登陆参数
     * @return
     */
    ResponseData<PassengerVo> login(ApiPassengerLoginParam passengerLoginParam);


    /**
     * 获取用户信息
     *
     * @param uuid 参数
     * @return PassengerVo
     */
    ResponseData<PassengerVo> selInfo(String uuid);

    /**
     * 乘客退出
     *
     * @param token 参数
     * @param appid 参数
     * @return AjaxList
     */
    ResponseData<Boolean> logout(String token, String appid);

    /**
     * 验证乘客账号是否存在
     *
     * @param uuid  参数
     * @param token 参数
     * @return boolean
     */
    ResponseData<Boolean> isPassenger(String uuid, String token);

    /**
     * 根据token从缓存中取数据，无则从数据库中获取
     *
     * @param token 参数
     * @return Map
     */
    ResponseData<Map<String, String>> getPassengerCachedByToken(String token);

    /**
     * 乘客信息导出
     *
     * @param passengerPageParam 参数
     * @return List
     */
    ResponseData<List<PassengerDto>> listExport(AdminPassengerPageParam passengerPageParam);

    /**
     * 优惠券预估乘客
     *
     * @param params 参数
     * @return List
     */
    ResponseData<List<PassengerDto>> estimate(Map<String, Object> params);

    /**
     * 获取乘客全部 uuids
     *
     * @param params 参数
     * @return List
     */
    ResponseData<List<String>> getUuids(Map<String, Object> params);

    /**
     * 获取uuids
     *
     * @param mobiles 参数
     * @return List
     */
    ResponseData<List<String>> getUuidsByMobiles(String[] mobiles);

    /**
     * 邀请注册乘客
     *
     * @param params 参数
     * @return AjaxList
     */
    ResponseData<Map<String, Object>> inviteRegister(Map<String, Object> params);

    /**
     * 获取所有沉睡用户的uuid
     *
     * @param unusedDays 沉睡天数
     * @return List
     */
    ResponseData<List<String>> getSleepPassengerUuids(Integer unusedDays);

    /**
     * 查询高频用户
     *
     * @param highFrequencyDays 高频天数
     * @param highFrequencyDays 高频次数
     * @return List
     */
    ResponseData<List<String>> getHighFrequencyPassengerUuids(Integer highFrequencyDays, Integer highFrequencyNum);

    /**
     * 根据乘客uuid获取对应的mobile
     *
     * @param passengerUuids 参数
     * @return List
     */
    ResponseData<List<PassengerDto>> getPassengerByUuids(List<String> passengerUuids);

    /**
     * 乘客礼包领取记录
     *
     * @param giftUuidPageParam 分页参数
     * @return Map
     */
    ResponseData<PageVo<PassengerDto>> queryDrawPage(AdminGiftUuidPageParam giftUuidPageParam);

    /**
     * 后台查询list
     *
     * @param params 参数
     * @return List
     */
    ResponseData<List<PassengerDto>> listExtend(Map<String, Object> params);

    /**
     * 增加乘客下单数量
     *
     * @param passengerUuid
     */
    void incrPasOrderCountByUuid(String passengerUuid);

    /**
     * 封号乘客
     *
     * @param passengerAbortParam
     * @return
     */
    ResponseData<Boolean> abort(AdminPassengerAbortParam passengerAbortParam);

    /**
     * 获取乘客简易信息
     *
     * @param uuid
     * @return
     */
    ResponseData<PassengerSimpleInfoVo> queyrSimpleInfoById(String uuid);

    /**
     * 根据用户token修改用户信息
     * passengerDto
     *
     * @return Boolean
     */
    Boolean editByToken(PassengerDto passengerDto);

}
